<?php

namespace app\admin\controller;

use app\admin\model\LinkModel;
use app\common\model\SpecTypeModel;
use cmf\controller\AdminBaseController;

/*商品规格管理*/

class GoodsSpecController extends AdminBaseController
{

    public function index()
    {
        $keywords = input('keywords', '');
        $map = [];
        $map[] = ['name', 'like', "%{$keywords}%"];
        $datas = db('spec_type')->where($map)->paginate(10);
        return view('', compact('datas'));
    }

    //新增规格类型
    public function specTypeAdd()
    {
        if (isPost()) {
            $param = input();
            //去重验证
            $rule = [
                'name' => 'require|unique:spec_type',
            ];
            $msg = [
                'name.require' => '类型不能为空',
                'name.unique' => '类型名已存在',
            ];
            $result = $this->validate($param, $rule, $msg);
            if (true !== $result) {
                $this->error($result);
            }
            if (db('spec_type')->insert($param)) {
                $this->success('新增成功', url('index'));
            } else {
                $this->error('未知错误');
            };
        }
        return view();
    }

    //编辑规格类型
    public function specTypeEdit()
    {
        $id = input('id');
        if (isPost()) {
            $param = input();
            //去重验证
            $rule = [
                'id' => 'require',
                'name' => 'require|unique:spec_type',
            ];
            $msg = [
                'id.require' => 'id不能为空',
                'name.require' => '类型不能为空',
                'name.unique' => '类型名已存在',
            ];
            $result = $this->validate($param, $rule, $msg);
            if (true !== $result) {
                $this->error($result);
            }
            if (db('spec_type')->where('id', $id)->update($param)) {
                $this->success('操作成功', url('index'));
            } else {
                $this->error('未知错误');
            };
        }
        $data = db('spec_type')->find($id);
        return view('', compact('data'));
    }

    //删除规格类型
    public function specTypeDel()
    {
        $id = input('id', 0);
        if ($id == 0) {
            $this->error('操作错误');
        }
        if (db('spec_type')->delete($id)) {
            $this->success('删除成功', url('index'));
        } else {
            $this->error('未知错误');
        }
    }

    //规格属性管理
    public function specAttr()
    {
        $type_id = input('type_id', 0);
        if ($type_id == 0) {
            $this->error('操作错误');
        }
        $datas = db('spec_attr')->where('type_id', $type_id)->paginate(10);
        //商品分类
        $specTypeData = db('spec_type')->find($type_id);
        return view('', compact('datas', 'specTypeData'));
    }

    //新增规格属性
    public function specAttrAdd()
    {
        //商品类型id
        $type_id = input('type_id');
        if (isPost()) {
            $param = input();
            //去重
            $isHaveData = db('spec_attr')->where('type_id', $param['type_id'])->where('attr_name', $param['attr_name'])->find();
            if ($isHaveData) {
                $this->error('该属性已经存在');
            }
            //新增
            $param['time'] = time();
            if (db('spec_attr')->insert($param)) {
                $this->success('新增成功', url('specAttr', array('type_id' => $param['type_id'])));
            } else {
                $this->error('未知错误');
            }
        }

        //商品分类
        $specTypeData = db('spec_type')->find($type_id);
        return view('', compact('specTypeData'));

    }

    //编辑规格属性
    public function specAttrEdit()
    {
        $id = input('id', 0);
        if ($id == 0) {
            $this->error('系统错误');
        }
        if (isPost()) {
            $param = input();
            //去重
            $isHaveData = db('spec_attr')
                ->where('type_id', $param['type_id'])->where('attr_name', $param['attr_name'])->find();
            if ($isHaveData) {
                $this->error('该属性已经存在');
            }
            if (db('spec_attr')->where('id', $param['id'])->update($param)) {
                $this->success('编辑成功', url('specAttr', array('type_id' => $param['type_id'])));
            } else {
                $this->error('未知错误');
            }
        }
        //获取属性数据
        $attrData = db('spec_attr')->find($id);
        //获取商品分类信息
        $typeData = db('spec_type')->find($attrData['type_id']);
        return view('', compact('attrData', 'typeData'));
    }

    //删除规格属性
    public function specAttrDel()
    {
        $id = input('id', 0);
        if ($id == 0) {
            $this->error('操作错误');
        }
        if (db('spec_attr')->delete($id)) {
            $this->success('删除成功');
        } else {
            $this->error('未知错误');
        }
    }

    //属性值管理
    public function specVal()
    {
        $id = input('id');
        $datas = db('spec_val')->where('attr_id', $id)->paginate(10);
        //获取属性数据
        $attrData = db('spec_attr')->find($id);
        //获取商品分类数据
        $typeData = db('spec_type')->find($attrData['type_id']);
        return view('', compact('datas', 'attrData', 'typeData'));
    }

    //新增属性值
    public function specValAdd()
    {
        $attr_id = input('attr_id', 0);
        if ($attr_id == 0) {
            $this->error('操作错误');
        }
        if (isPost()) {
            $param = input();
            //去重
            $res = db('spec_val')->where('type_id', $param['type_id'])
                ->where('attr_id', $param['attr_id'])
                ->where('attr_value', $param['attr_value'])
                ->find();
            if ($res) {
                $this->error('该属性值已存在');
            }
            if (db('spec_val')->insert($param)) {
                //清除缓存
                cache("spec_category_list_" . $param['type_id'], null);
                $this->success('操作成功', url('specVal', array('id' => $param['attr_id'])));
            } else {
                $this->error('未知错误');
            }
        }
        //根据属性id获取属性数据
        $attrData = db('spec_attr')->find($attr_id);
        //获取商品分类数据
        $typeData = db('spec_type')->find($attrData['type_id']);
        return view('', compact('attrData', 'typeData'));
    }

    //编辑属性值
    public function specValEdit()
    {
        $id = input('id', 0);
        if ($id == 0) {
            $this->error('操作错误');
        }
        if (isPost()) {
            $param = input();
            //去重
            $res = db('spec_val')->where('type_id', $param['type_id'])
                ->where('attr_id', $param['attr_id'])
                ->where('attr_value', $param['attr_value'])
                ->find();
            if ($res) {
                $this->error('该属性值已存在');
            }
            if (db('spec_val')->where('id', $param['id'])->update($param)) {
                //清除缓存
                cache("spec_category_list_" . $param['type_id'], null);
                $this->success('操作成功', url('specVal', array('id' => $param['attr_id'])));
            } else {
                $this->error('未知错误');
            }
        }

        //该属性值的数据
        $data = db('spec_val')->find($id);
        //根据属性id获取属性数据
        $attrData = db('spec_attr')->find($data['attr_id']);
        //获取商品分类数据
        $typeData = db('spec_type')->find($attrData['type_id']);
        return view('', compact('data', 'attrData', 'typeData'));

    }

    //删除属性值
    public function specValDel()
    {
        $id = input('id', 0);
        if ($id == 0) {
            $this->error('操作错误');
        }
        if (db('spec_val')->delete($id)) {
            $this->success('删除成功');
        } else {
            $this->error('未知错误');
        }
    }

    /**
     * 异步获取规格html 的 table 列表
     */
    public function getSpecListTable()
    {
        $category_id = input("category_id");
        $goods_id = input("goods_id", 0);
        $table = model("SpecVal")->getSpecValueHtml($category_id, $goods_id);
        $data['code'] = 200;
        $data['data'] = $table;
        echo json_encode($data);
    }

}
